約 1,887,925 件
https://w.atwiki.jp/oboegakiwiki/pages/20.html
実行時のException in thread "main" java.lang.NoClassDefFoundErrorについて CLASSPATHが設定されているから。本来はなくていい(最近のヴァージョンでは)。 環境変数にCLASSPATHがあったら、「.;」を頭につけてあげる。 C \Program Files\java\..... → .;C \Program Files\java\..... Cygwinで、コンパイルや実行が出来ない javacやjavaがCygwinで認識されない時があるが(特にjava)、なんか知らない間に出来るようになってた(笑) pathの設定とかちゃんとやっとけばそのうちなんとかなる気がする
https://w.atwiki.jp/gen3/pages/20.html
java javaドキュメンテーションコメント多言語フィルタ 2013-11-23 以下はあまり役に立たないアイデア。javascriptにでも既定の言語を検出して表示するdivを選択するようなコードを書くほうがすっきりする。 javadocを多言語化する方法として、ドキュメントコメントを例えば次のように書いておき、 /** * div lang="ja" これは日本語のコメントです。 * 第二行目から詳細コメントになるのはjavadocの仕様です。 * /div * div lang="en" This is a English comment. * The second line and belows are details, because of javadoc specification. * /div */ void Dummy() {} これを処理するdocletで例えば -sellang ja とすれば void Dummy() これは日本語のコメントです。 第二行目から詳細コメントになるのはjavadocの仕様です。 となり -sellang en,ja とすれば void Dummy() This is a English comment. The second line and belows are details, because of javadoc specification. これは日本語のコメントです。第二行目から詳細コメントになるのはjavadocの仕様です。 となるようなカスタムdocletが比較的簡単に作れる気がする。 docletの処理内容は、単に div lang=xx のブロックを選択したり並べ替えたりするだけで、あとは標準のjavadocの処理に任せればよい。 まあ、@xxxみたいなタグもあるので span lang="ja" みたいなのも処理できたほうがいいのかな。 というわけで書いてみたらわりと目処が付いたみたいなので、そのうち公開予定。 javaドキュメンテーションコメント多言語フィルタ javaでMP3ファイルのID3タグを読む JavaでID3タグを見る件に関しては、Java ID3 Tag Libraryが老舗らしい。 ファイルオブジェクトを引数としてコンストラクタを呼べば、 取得したオブジェクトからID3の中身の曲名とかアルバムタイトルとかを各種getメソッドで取得できるらしい。設定も出来る模様。日本語環境で扱う場合は文字エンコードに注意しなければならないこともある様子だが。 java.util.logging.Loggerの設定がgetConnectionで書き換わるバグ...ではなかった 以下は System.setProperty("hsqldb.reconfig_logging", "false"); とすればよい、とHSQLDBのヘルプフォーラムで回答をもらった。以下は同様にはまるかもしれないヒトのために整理しながら残しておく。 getConnectionの後に、java.util.Loggerのメッセージが出なくなるとかで悩んだ。 以下、再現可能なコード。 import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.util.logging.Level; import java.util.logging.Logger; /** * 最小構成。新規のパス(URL)を与えて新たにDBを作成すると、Connectionの後のLOGが出ない。 * @author usr1 */ public class LogTest { private static final Logger LOG = Logger.getLogger("TEST"); public static void main(String[] args) { LOG.setLevel(Level.ALL); Connection c = null; try { LOG.info("getConnection前"); System.out.println(LOG.getParent().getHandlers()[0].getFormatter().getClass().getName()); c = DriverManager.getConnection("jdbc hsqldb file //" + args[0] + ";shutdown=true;", "SA", ""); System.out.println(LOG.getParent().getHandlers()[0].getFormatter().getClass().getName()); LOG.setLevel(Level.ALL); LOG.info("getConnection後"); c.close(); } catch (SQLException e) { } } } 上記のコードにて、DBのパスを書き換えた直後の実行(つまり新たなDBを作成して接続する場合)では、以下のようにログメッセージ「getConnection後」が出力されない。Loggerのフォーマッタやハンドラが書き換わってしまっている。 (1回目) C \ java -jar LoggerTest.jar c \test\test99 11 23, 2013 1 00 29 午後 newpackage.LogTest main 情報 getConnection前 java.util.logging.SimpleFormatter org.hsqldb.lib.BasicTextJdkLogFormatter (2回目) C \ java -jar LoggerTest.jar c \test\test99 11 23, 2013 1 00 44 午後 newpackage.LogTest main 情報 getConnection前 java.util.logging.SimpleFormatter java.util.logging.SimpleFormatter 11 23, 2013 1 00 46 午後 newpackage.LogTest main 情報 getConnection後 上のように常に二回目以後が大丈夫ならまだいいのだが、これとは違うもっと大きなコードの中では二回目以後も出力されずに困る。 Logger.getGlobal().setLevel(Level.INFO) も試したが効果は無い。 ネットを検索するとJava SE 7 の logger にはバグがあるそうだが、それとの関係は不明。 NetBeansのデバッグモードで見るとLOG.manager.propsは正常なら9個の配列で、 LOG.manager.props[3] "java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter" とコンソールへの出力が標準のフォーマッタに設定されている。 これが新規のパスにgetConnectionした後だと、 java.util.logging.ConsoleHandler.formatter = org.hsqldb.lib.BasicTextJdkLogFormatter という結果になり、DriverManagerがログの設定を書き換えたまま戻していないようである。 HSQLDBのヘルプフォーラムで質問すると速攻で System.setProperty("hsqldb.reconfig_logging", "false"); で解決すると回答をもらった。HSQLDBは2,3のシステムプロパティを使っているとのこと。
https://w.atwiki.jp/oribe/pages/7.html
java関連ページ javaの学習に関して javaの勉強でお勧めだと思う方法は、まずjdkをPCに入れ、その後 eclipseを入れ、eclipseで練習するのがいいと思う。 最初は取りあえずHello Worldからはじまって入門レベルをおさえたら デザインパターンを勉強する。そこまでいったら後は何をやるかによると思う。 WEB開発ならTomcatの勉強とかしたりstrutsやseasar、springを勉強するもよし。 by hiroki Ajaxの開発をするならgooglipseがよかった。 APIが限られてるけどjavaで記述して結構簡単につくれちゃう。 by hiroki リリースされましたね。まだ触ってないけど;https //jdk6.dev.java.net/ -- javaSE6 mustang (2006-12-15 15 52 41) 名前 コメント
https://w.atwiki.jp/sfrontier/pages/30.html
Knowledge and Technique 作成日 2007/11/01 H.Naito 更新日 2007/11/27 T.Kodama 注意 このページは基本的に、Java 5.0 での情報を載せています。 Java 5.0 以外のバージョンの情報を掲載する場合には、バージョン情報を付けた上で記述します。 General 文法 フレームワーク Information その他 メモ General Java ってなあに? Wikipedia IT用語辞典 e-Words はてなダイアリー 文法 予約語 識別子 データ型 演算子 フレームワーク Information WebPage Books Effective Java SampleCode その他 javacコマンド メモ 配列 宣言の際、変数に [] を付けないで、型に付ける方が Java っぽい ant の話 Javac でソースディレクトリを指定しているのに、 sourcepath="" を入れるのは、コンパイルの際、include を消しても勝手に javac が階層配下を見に行って成功させてしまい、実際に動かそうとしたらクラスが無いとなっていしまうのを防ぐ為。 ソースファイル内での定義の順番 [ Option ] パッケージ宣言 [ Option ] インポート宣言 [ 必須 ] クラス、インタフェース、列挙型の定義 パブリッククラスとクラス名 ソースファイル内に1つでも public クラスがある場合には、そのソースファイル名は必ずパブリッククラスと同じ名前を付けなければいけません。 したがって、パブリッククラスは1つのソースファイル内に1つしか定義できません。 同様に、public 指定されたインタフェースや列挙型がある場合は、ソースファイル名は、必ず public 指定されたインタフェースや列挙型と同じでなければ、なりません。
https://w.atwiki.jp/ab3104/pages/15.html
java - * java に関する メモ書きです。。。 * java に関する メモ書きです。。。 o java基本 o Web Frame works o O/R マッピング o DI o アプリケーションサーバ java に関する メモ書きです。。。 注意: 嘘ばかり書いてある可能性があります。 java基本 Web Frame works * wicket * JSF? o VisualWebPack NetBeans5.5-VisualWebpack? または Creator2Update1 に関するメモ O/R マッピング * S2DAO * Hibernate DI * Seaser? * SPRING アプリケーションサーバ * jetty6.1 * tomcat
https://w.atwiki.jp/memcache/pages/23.html
ITPro Java技術最前線 SwingUnit VisualVM Snmp4J RMI ITPro Java技術最前線 URL http //itpro.nikkeibp.co.jp/article/COLUMN/20060915/248243/?ST=develop SwingUnit URL https //swingunit.dev.java.net/ VisualVM URL https //visualvm.dev.java.net/ Snmp4J URL http //www.snmp4j.org/ RMI RMI によるカスタムソケットファクトリの使用 http //java.sun.com/javase/ja/6/docs/ja/technotes/guides/rmi/socketfactory/index.html その他 http //www.ne.jp/asahi/hishidama/home/tech/java/j2ee/rmi.html http //d.hatena.ne.jp/nowokay/20060817#1155840591 http //d.hatena.ne.jp/muimy/20060831/1156996173 http //d.hatena.ne.jp/Kazzz/20080122/p1 http //www.edita.jp/trash/one/trash7431892.html http //www.02.246.ne.jp/~torutk/javahow2/rmi_nostub.html#doc1_id43 http //74.125.153.132/search?q=cache c1f2YwqqYSEJ www.hanatoyume.net/article.php/20090430190202197+RMI+java+6+stub cd=6 hl=ja ct=clnk gl=jp lr=lang_ja client=firefox-a http //www.google.co.jp/search?hl=ja client=firefox-a rls=org.mozilla%3Aja%3Aofficial hs=QgW q=RMI++stub+%E4%B8%8D%E8%A6%81 btnG=%E6%A4%9C%E7%B4%A2 lr=lang_ja aq=f oq=
https://w.atwiki.jp/programhack/pages/16.html
Java関連 修飾子のスコープ スコープがたまに曖昧になるので、メモ とほほのJava入門 修飾子 http //www.tohoho-web.com/java/modifier.htm Javaコーディング規約というか書き方? よさげな記事だったので、メモ。 http //thinkit.co.jp/free/tech/15/2/1.html
https://w.atwiki.jp/mixmusic/pages/29.html
JAVA ■java オブジェクト指向 セキュリティ構成やネットワーク関連の機能が標準搭載 javaソフトウェアはプラットフォームに依存しない ■platform アプリケーションソフトを動作させる際の基盤となるOSの種類や環境、設定のこと ■struts jakartaプロジェクトが開発したWEBアプリケーションフレームワーク ■tomcat JAVAサーブレット・JSPを処理するアプリケーションサーバ ApacheやIISのプラグインとして動作できる ■jakartaプロジェクト オープンソースのWEBサーバソフトなどを開発しているApacheプロジェクトのサブプロジェクト ■Apache WEBサーバ □■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■ 開発環境構築手順 プラットフォーム(SW) OS : Microsoft XP Professional SP2 DB : Oracle 10g(10.2.0) SWIDE : Eclipse() ■SWIDE構築 ■JRE(1.4)インストール ■Eclipse()インストール ■Eclipse()の日本語化 ■J2SE SDK(コンパイラ・Java標準API・Javadocマニュアル) ※J2SE SDKマニュアル(日本語版) ■DB構築 ┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏┏用語解説┓┓┓┓┓┓┓┓┓┓┓┓┓┓┓┓┓┓┓┓ プラットフォーム(Platform) ・・・アプリケーションソフトを動作させる際の基盤となるOSの種類や環境、設定等 OS(Operating System) ・・・コンピュータシステム全体を管理するソフトウェア DB(Database) ・・・共有されるデータの集合 Oracle ・・・リレーショナルデータベース管理システム SWIDE(Software Integrated Development Environment) ・・・ソフトウェア総合開発環境 JRE(Java Runtime Environment) ・・・Java言語で開発されたソフトウェアを実行するために必要なソフトウェアのセット SDK(Software Development Kit) ・・・プログラミング言語やAPI等のテクノロジーを利用してソフトウェアを開発する際に必要なツールのセット □■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■
https://w.atwiki.jp/naobe/pages/25.html
言語に戻る EJB JavaEE5 MBean JMX JNDI サーブレット 言語仕様 項目 説明 transient 修飾子。Seriariseオブジェクトの保管しないフィールドを修飾する。 クラスローダ http //www.techscore.com/tech/Java/JavaEE/Servlet/supplement-1/ 参照 目的 同じ名前でバージョンの異なるクラスを使用するために使う。クラスローダが異なればバージョンが異なっても良い。自分自身のクラスローダを得るにはgetClassLoader()メソッドを用いる。 クラスローダには親子関係があり、子クラスローダがクラスをロードするときには、親クラスローダにロードを依頼してロードできなければ、子クラスローダがロードする。 Class#getClassLoader()は、このクラスをロードしたクラスローダを返す クラスローダによってロードされたClassはパーマネント領域に格納される。ClassLoaderがGCされるとGCから解放される。 VMのクラスローダ ブートストラップクラスローダ JAVA_HOME /lib下のJARファイルに含まれるクラスをロードする。JDK6は、 JAVA_HOME /jre/lib下? 親はいない 拡張クラスローダ JAVA_HOME /lib/ext下のJARファイルに含まれるクラスをロードする。JDK6は、 JAVA_HOME /jre/lib/ext下?親はいない システムクラスローダ CLASSPATHで指定した位置からクラスをロードする。親は拡張クラスローダ。ブートストラップクラスローダは親子関係なしでも委譲されるということでは? 通常のnew Foo()ではこのクラスローダが使われる。 ブートストラップクラスローダ、拡張クラスローダ、システムクラスローダの順番でクラスをロードする。 コンテキストクラスローダ(JDK6 API Threadより) コンテキスト ClassLoader は、クラスおよびリソースをロードするときに、このスレッドで実行中のコードが使用するためにスレッドの作成側によって提供されます。コンテキスト ClassLoader が設定されていない場合、デフォルトでは親 Thread の ClassLoader コンテキストになります。通常、親スレッドのコンテキスト ClassLoader は、アプリケーションのロードに使用されるクラスローダーに設定されます。 なので、設定しなければシステムクラスローダがコンテキストクラスローダになる。 コンテキスト・クラスローダを設定・取得するには、java.lang.Thread#setContextClassLoader,getContextClassLoaderメソッドを使う。 クラスローダ作成 JDK6 APIより たとえば、アプリケーションはネットワーククラスローダーを作成して、サーバーからクラスファイルをダウンロードできます。コードは次のようになります。 ClassLoader loader = new NetworkClassLoader(host, port); Object main = loader.loadClass("Main", true).newInstance(); . . . ネットワーククラスローダーのサブクラスは、ネットワークからクラスをロードするために findClass メソッドと loadClassData メソッドを定義しなければなりません。クラスを作成するバイトを一度ダウンロードしたら、defineClass メソッドを使ってクラスインスタンスを生成する必要があります。実装の例を次に示します。 class NetworkClassLoader extends ClassLoader { String host; int port; public Class findClass(String name) { byte[] b = loadClassData(name); return defineClass(name, b, 0, b.length); } private byte[] loadClassData(String name) { // load the class data from the connection . . . } } 特定のディレクトリからクラスをロードするクラスローダを作成してみる。 MyClassLoaderのmainメソッドで、test.MyClassLoaderTargetをロードしClassを作成する MyClassLoaderはClassLoaderを継承したクラスで、loadClassメソッドをオーバライドし、c /mydoc/tmp/を優先的にロードするディレクトリとしている。c /mydoc/tmp/にクラスがない場合は、ClassLoaderのloadClassメソッドを実行する ClassLoaderのloadClassメソッドでは、キャッシュにあれば、そのクラスを返す。なければ親クラスローダに移譲する。なければシステムクラスローダを使ってクラスをロードする Class#newInstance()を実行して、インスタンスを生成する MyClassLoaderTarget#execute()を実行し、MyClassLoaderTarget2をnewしてexecute()を実行する 実行結果を見ると、MyClassLoaderTarget2のクラスローダは、MyClassLoaderであることがわかる。つまりクラスローダを使ってロードしたクラスから別のクラスをnewするときはそのクラスローダを使うことがわかる。クラスローダを作成すると親クラスローダはシステムクラスローダになる。 コンテキストクラスローダは明示的に使用しない限り、使われることはなさそう。 package test; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; public class MyClassLoader extends ClassLoader { private static final int BUFSIZE = 1024; private byte[] result; private int last = 0; @Override public Class ? loadClass(String name) throws ClassNotFoundException { Class ? c = null; try { c = findClass(name); } catch (ClassNotFoundException e) { c = super.loadClass(name); } return c; } private void dbg(String string) { System.out.println(string); } @Override protected Class ? findClass(String name) throws ClassNotFoundException { try { byte[] b = loadClassData(name); return defineClass(name, b, 0, b.length); } catch (Exception e) { throw new ClassNotFoundException(e.getMessage(), e); } } private byte[] loadClassData(String name) throws IOException { result = new byte[0]; last = 0; FileInputStream ins = null; try { byte[] buf = new byte[BUFSIZE]; int readSize = 0; name = name.replace( . , / ); File classFile = new File("c /mydoc/tmp/" + name + ".class"); ins = new FileInputStream(classFile); while((readSize = ins.read(buf)) != -1 ) { moveToResult(readSize, buf); } return result; } finally { if(ins != null) { ins.close(); } } } private void moveToResult(int readSize, byte[] buf) { byte[] tmp = new byte[last + readSize]; // 結果バイト配列をtmp配列の先頭にコピー System.arraycopy(result, 0, tmp, 0, result.length); // bufをtmp配列にコピー System.arraycopy(buf, 0, tmp, last, readSize); result = tmp; last += readSize; } public static void main(String[] args) { try { MyClassLoader loader = new MyClassLoader(); System.out.println("parent " + loader.getParent().getClass().getName()); Class ? clazz = loader.loadClass("test.MyClassLoaderTarget"); System.out.println("target class loader name " + clazz.getClassLoader().getClass().getName()); ((Executor)clazz.newInstance()).execute(); } catch (Exception e) { e.printStackTrace(); } } } package test; public class MyClassLoaderTarget implements Executor { @Override public void execute() { System.out.println("AAA"); MyClassLoaderTarget2 target2 = new MyClassLoaderTarget2(); target2.execute(); System.out.println("target2 class loader name " + target2.getClass().getClassLoader().getClass().getName()); } public static void main(String[] args) { MyClassLoaderTarget target = new MyClassLoaderTarget(); target.execute(); } } package test; public class MyClassLoaderTarget2 implements Executor { @Override public void execute() { System.out.println("BBB"); } public static void main(String[] args) { MyClassLoaderTarget2 target = new MyClassLoaderTarget2(); target.execute(); } } package test; public interface Executor { public void execute(); } 実行結果 parent sun.misc.Launcher$AppClassLoader target class loader name test.MyClassLoader AAA BBB target2 class loader name test.MyClassLoader ThreadLocal スレッドに固有のオブジェクトを保管するために使う(Thread Singleton)。Servletの中で、使用例としてDBに対するConnectionをスレッド毎に保管する場合があげられる。この場合、引数にConnectionを作成すると全てのメソッドにConnectionの引数が必要になり手間がかかる。スレッドにプライベートフィールドを作成して保管できないときに使える。 JDBC 参照 タイプ 説明 備考 type2 ベンダのライブラリと共同して、DBと通信。ベンダのクライアントアプリが必要。 type4 直接DBと通信。JDBCドライバサイズが大きい バッチ insert, updateが連続して行われるときにネットワークトラフィックを削減するために使う。PreparedStatementオブジェクトに対して、addBatch(), executeBatch()メソッドを使うと複数のステートメントをまとめてDBサーバ送信する。 言語コード コード名 説明 Windows-31J ShiftJISの拡張。NEC特殊コードもサポート。 スレッドダンプ 稼働中のスレッドを標準出力にダンプする。 kill -3 プロセス番号 出力例 daemon以外のスレッドを見る。以下の例ではSNMP APIで停止している。 Full thread dump Java HotSpot(TM) Server VM (11.2-b01 mixed mode) "RMI Scheduler(0)" daemon prio=10 tid=0x0955e000 nid=0x15db waiting on condition [0x30cd1000..0x30cd1fa0] java.lang.Thread.State TIMED_WAITING (parking) at sun.misc.Unsafe.park(Native Method) - parking to wait for 0x37f243d8 (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java 198) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java 1963) at java.util.concurrent.DelayQueue.take(DelayQueue.java 164) at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java 583) at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java 576) at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java 947) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java 907) at java.lang.Thread.run(Thread.java 619) "Thread-7" prio=10 tid=0x0954bc00 nid=0x15bf in Object.wait() [0x30eb7000..0x30eb7ea0] java.lang.Thread.State TIMED_WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on 0xa89ec300 (a com.adventnet.snmp.snmp2.SnmpCallback) at com.adventnet.snmp.snmp2.SnmpCallback.sleepUntilNotified(SnmpCallback.java 166) - locked 0xa89ec300 (a com.adventnet.snmp.snmp2.SnmpCallback) at com.adventnet.snmp.snmp2.SnmpCallback.run(SnmpCallback.java 152) アノテーション 注釈。プログラムに影響を与えない。プログラムから読める。コンパイラの動作に影響を与える。 @Override Overrideアノテーションを付加したメソッドがオーバライドメソッドでなければコンパイルエラーになる。 @SuppressWarning Xlintを指定したときに発生する警告メッセージを抑制する。 アプレット jarファイルを指定するには、ARCHIVEタグを使う。CLASSPATHはきかない。 セキュリティポリシー java.policyファイルの構文 grant signedBy "signer_names", codeBase "URL", principal principal_class_name "principal_name", principal principal_class_name "principal_name", ... { permission permission_class_name "target_name", "action",signedBy "signer_names"; permission permission_class_name "target_name", "action",signedBy "signer_names"; ... }; ここで、"signer_names"、"URL"、principal_class_name、"principal_name"、permission_class_name、"target_name"、"action"、"signer_names"は、変数。 signedBy 、codeBase、、principal は省略可能。 意味は、signer_namesで署名されたURLにあるプログラムが、permission_class_nameで規定されるtarget_nameに対して、actionすることを許可する。target_name, actionについては、permission_class_nameのAPIを参照。 http //java.sun.com/j2se/1.5.0/ja/docs/ja/guide/security/PolicyFiles.html 参照。 例 permission java.io.FilePermission "\\\\192.168.1.40\\-", "read,write"; 192.168.1.40のリモートファイルに対する読み書きを許可する。 Linux firefoxへのJava Plugin インストール 例 # ln -s /usr/java/jdk1.6.0_20/jre/lib/i386/libnpjp2.so /opt/firefox/plugins インストールの確認 urlにabout pluginsを設定して開く Linuxでのplugin コントロールパネル 起動 $JAVA_HOME/bin/ControlPanel を実行 最大メモリ容量の修正 "-XX MaxPermSize=256m"をJavaタブのアプレットパラメータに追加 その他 スタックトレースをStringに変換する 仕事の都合で、最後の行で改行を削除してタブをスペースに変換している。 private String getStackTraceAsString(Exception e) { ByteArrayOutputStream ostream = new ByteArrayOutputStream(100); e.printStackTrace(new PrintStream(ostream)); String sep = System.getProperty("line.separator"); return ostream.toString().replaceAll(sep, "").replace("\t", " "); } 固定長レコードのファイルを出力 package test; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.UnsupportedEncodingException; public class SingleFille { private BufferedOutputStream bstream; /** * ファイルに書き込むデータ * 桁数 * 内容 */ private String[][] data = { {"aaa1", "bbb1", "ccc1"}, {"漢字2", "bbb2", "ccc2"}, {"aaa3", "漢字3", "ccc3"}, {"aaa4", "bbb4", "漢字4"}, }; /** 列の桁数 */ private int[] length = {10, 20, 30}; /** ファイルオフセット */ private int offset = 0; private static final String FILE_PATH = "singleFile.dat"; public static void main(String[] args) { SingleFille sfile = new SingleFille(); try { sfile.execute(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } public void execute() throws IOException { File file = new File(FILE_PATH); try { FileOutputStream stream = new FileOutputStream(file); bstream = new BufferedOutputStream(stream); for(int i = 0; i data.length; i++) { String[] line = data[i]; putFile(line); } } catch (IOException e) { throw e; } finally { if(bstream != null) { try { bstream.close(); } catch (IOException e) { throw e; } } } } /** * @param line * @throws IOException */ private void putFile(String[] line) throws IOException { for(int i = 0; i line.length; i++) { //各列を桁数になるように整形 byte[] term = createTerm(line[i], i); bstream.write(term); offset += term.length; } } /** * @param term * @param index * @return * @throws UnsupportedEncodingException */ private byte[] createTerm(String term, int index) throws UnsupportedEncodingException { //項目を格納するバイト byte[] outterm = new byte[length[index]]; //項目をShift_JISのバイトに変換 byte[] interm = term.getBytes("SJIS"); for(int i = 0; i outterm.length; i++) { if( i interm.length) { outterm[i] = interm[i]; } else { //残りはスペース outterm[i] = 0x20; } } return outterm; } }
https://w.atwiki.jp/volvicn55/pages/7.html
Java Java JavaJava